#pragma once

#include <vector>
#include <hash_map>
#include <string>

#include "Capa.h"
#include "TileSet.h"


using namespace std;

typedef struct _punto{
	_punto(float x1,float y1):x(x1),y(y1){};
	float x;
	float y;
	}punto;
class Mapa
	{
	friend Capa;
	private:
		vector<Capa*> capas;
		vector<TileSet*> tileSets;

		hash_map<string,punto*> spawns;

		int anchoMapa;
		int altoMapa;	
		int anchoTile;
		int altoTile;
		
		bool *mapaNavegacion;
	public:
		Mapa();
		Mapa(std::string const & nombreMapa);
		void addSpawnPoint(float x, float y, string & nombre);
		void cargar(std::string const & nombreMapa);
		void render();
		bool esAccesible(int x, int y);

		//getters
		int getAnchoTile() const { return anchoTile; }
		int getAltoTile() const { return altoTile; }	
		int getAltoMapa() const { return altoMapa; }
		int getAnchoMapa() const { return anchoMapa; }
		punto *getSpawn(string & nombre);
		~Mapa(void);
	private:
		void construirMapaNavegacion();
		bool esAccesibleCapas(int x, int y);
	};
